package com.pactera.madp.cp.handler.sync.impl;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import com.pactera.madp.common.core.util.SpringContextHolder;
import com.pactera.madp.cp.api.dto.sync.SyncDTO;
import com.pactera.madp.cp.api.em.beta.NewsTypeEnum;
import com.pactera.madp.cp.common.annotations.SyncType;
import com.pactera.madp.cp.common.enums.sync.SyncTypeEnum;
import com.pactera.madp.cp.handler.sync.SyncTypeHandler;
import com.pactera.madp.cp.service.sync.SyncBetaChoreography;
import com.pactera.madp.cp.service.sync.SyncBetaOriginal;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * @title Beta资讯-同步批量
 *
 *  - 精编系列
 *    - 资讯陪伴：
 *      - [V] [07:00 工作日]->早报
 *      - [V] [12:00 工作日]->午报
 *      - [V] [16:30 工作日]->收盘点评
 *      - [V] [17:30 工作日]->晚报
 *      - [X] [每01:00执行] ->24热点（编码未知）
 *      - [X] [?] ->秒懂系列（编码未知）
 *    - 精编系列:
 *      - [V] [10:00 工作日]->基金精编、保险精编、理财精编、宏观精编、房产精编、国际市场精编、证券精编
 *      - [V] [12:00 每周一]->私募精编
 *      - [V] [12:00 每周三]->家族财富精编
 *      - [V] [12:00 每周四]->税筹/小微精编
 *    - 策略研究:
 *      - [V] [07:00 工作日]->财商保典、有基知识、基不可失、理财问答、图说理财
 *      - [X] [?不定期]->热点聚焦
 *      - [V] [07:00 每周一]->保险周记、理财周历
 *      - [V] [17:00 每周二]->基金策略周报、资产配置周报
 *      - [X] [?不定期]-基金经理研究
 *      - [X] [月初]->资产配置月报
 *      - [V] [17:00 工作日]->突发热点、数说宏观、市场零距离、基金新知
 * @date 2022-06-10
 * @author Deming.Chang
 */
@Component
@SyncType(SyncTypeEnum.BETA)
public class BetaSyncHandler implements SyncTypeHandler {

    /**
     * 资讯二级分类编码
     */
    private static final String PARAMS_KEY = "types";

    @Override
    public Boolean handler(SyncDTO dto) {
        // 1.0 验证参数合法性
        Map<String, Object> params = dto.getParams();
        String types = MapUtil.getStr(params, PARAMS_KEY);
        if (StrUtil.isBlank(dto.getSubType()) || CollUtil.isEmpty(params) || StrUtil.isBlank(types)) {
            throw new IllegalArgumentException();
        }
        // 2.0 根据参数执行同步
        if (StrUtil.equals(NewsTypeEnum.CHOREOGRAPHY.getType(), dto.getSubType())) {
            SpringContextHolder.getBean(SyncBetaChoreography.class).handler(dto);
        }
        if (StrUtil.equals(NewsTypeEnum.ORIGINAL.getType(), dto.getSubType())) {
            SpringContextHolder.getBean(SyncBetaOriginal.class).handler(dto);
        }
        return Boolean.TRUE;
    }
}
